<?php 
/**
 *  【梦想cms】 http://www.lmxcms.com
 * 
 *   前台栏目页面控制器
 */
defined('LMXCMS') or exit();
use GatewayWorker\Lib\Gateway;
class LaGameAction extends HomeAction{
    public $dataModel;
    public function __construct(){
        parent::__construct();
        if($this->dataModel==null){
            $this->dataModel=new DataModel();
        }
    }

    /*todo 游戏1
    *参数：roomid uid gameData
    * mygameData:当前客户选择 如 石头 剪子  布
    *
    * 没有结果  等待
    *  有结果  gemeData置空 分别通知游戏双方游戏结果
   */
    public function gameOne(){

        $uid=$this->SocketData['uid'];
        $roomid=$this->SocketData['uid'];
        $mygameData=$this->SocketData['gamedata'];
        $roomData=$this->DataModel->getRoomData($roomid);
        $fitid=$this->DataModel->getFitid($roomid,$uid);
        $fitData=$roomData["userData"][$fitid];
        $this->dataModel->updatalastTime($roomid,$uid);//todo 更新最好操作时间

        $uidData=$roomData["teamA"][$uid];
        $uidjoy=$uidData["job"];
        $orderPlay=$uidData["orderPlay"];




        if($fitData['gameData']==0){

        }else{
            //游戏逻辑
            $this->DataModel->setGameData();//todo 储存自己的游戏结果
            //判断大局还是小局 win+1  //储存win+1
            $result=$this->$fitData;
            $swin="2";
            if($result==1){
                $this->DataModel->setGameWin($roomid,$uid);
            }
            if($result==2){
                $this->DataModel->setGameWin($roomid,$uid);
            }
            if($result==3){
                $this->DataModel->setGameWin($roomid,$uid);
            }
            if($result==6){
                $this->DataModel->setGameWin($roomid,$uid);
            }


            //重新取出上方win  相加 =3

            $mywin=$this->dataModel->getWinData($roomid,$uid);//todo 获取胜利数
            $fitwin=$this->dataModel->getWinData($roomid,$fitid);
            $resultwin= $mywin+$fitwin;
            if($resultwin==2 ||1){
                if($mywin>$fitwin){

                    $this->dataModel->setOutData($roomid,$fitid);//todo 设置用户游戏结束
                    $reData['l']='outGame';
                    $reData['w']='waitGame';
                    //通知对方进入等待房间
                    Gateway::sendToUid($fitid,json_encode($reData['l']));
                    //通知自己进入游戏对战等待房间，做下一轮准备
                    Gateway::sendToUid($uid,json_encode($reData['w']));
                }
                else{
                    $this->dataModel->setOutData($roomid,$uid);
                    $reData['l']='outGame';
                    $reData['w']='waitGame';
                    //通知自己失败进入等待房间
                    Gateway::sendToUid($uid,json_encode($reData["l"]));
                    //修改orderPlay的值
                    $this->dataModel->updaData($roomid,$uid,$orderPlay);
                    //通知下一位玩家做准备
                    $uidNext=$this->dataModel->GetNextUid($roomid,$uid,$orderPlay);
                    Gateway::sendToUid($uidNext,json_encode($reData["w"]));
                    //通知对方进入游戏对战等待房间，做下一轮准备
                    Gateway::sendToUid($fitid,json_encode($reData['w']));

                }

            }else{
                //游戏为得出胜负 谁输谁选 通知到游戏双方



                die();
            }
            //= 判断大局胜负  输剔除游戏房间 胜利的返回相关数据   等待


            //判断  其他组是否结束游戏
            $wait=0;
            foreach($roomData['userData'] as $k => $value){

                if($value['out']==false){
                    if($value['bigwin']==0){
                        $wait=1;
                    }
                }
            }
            if($wait==0){
                //匹配玩家
            }


        }

    }

    public function gameTwo(){
        $uid=$this->SocketData['uid'];
        $roomid=$this->SocketData['uid'];
        $mygameData=$this->SocketData['gamedata'];
        $roomData=$this->DataModel->getRoomData($roomid);
        $fitid=$this->DataModel->getFitid($roomid,$uid);
        $fitData=$roomData["userData"][$fitid];
        $this->dataModel->updatalastTime($roomid,$uid);//todo 更新最好操作时间

        $kai=$this->SocketData['kai'];//开骰子
        $uidnumber=$uid[number];//自己骰子点数
        $fitidnumber=$fitid[number];//对方骰子点数
        $kainumber=$kai[number];//开骰子喊得点数
        $number=$uidnumber+$fitidnumber;//双方综合点数

        if($fitData['gameData']==0){

        }else{
            //游戏逻辑
            $this->DataModel->setGameData();//todo 储存自己的游戏结果

            if($kai==1){
                //开骰子  判断结果
                if($number>=$kainumber){
                    //下家获得胜利     下家为被开塞子的玩家
                    $this->DataModel->setGameWin($roomid,$uid);

                }else{
                    //上家获得胜利   上家为开骰子的玩家
                    $this->DataModel->setGameWin($roomid,$uid);


                }

            }else{
                //游戏继续...接着喊


            }



        }
    }
    //todo 老虎杠子鸡
    public function gameFive(){
        $uid=$this->SocketData['uid'];
        $roomid=$this->SocketData['uid'];
        $mygameData=$this->SocketData['gamedata'];
        $roomData=$this->DataModel->getRoomData($roomid);
        $fitid=$this->DataModel->getFitid($roomid,$uid);//要修改
        $myteam=$this->SocketData['myteam'];
        $fitData=$roomData["userData"][$fitid];
        $uidData=$roomData["userData"][$uid];
        $this->dataModel->updatalastTime($roomid,$uid);//todo 更新最好操作时间


        $FourGame=$roomData['userData'][$uid]['FourGame'];
        $uidhands=$FourGame['uidhand'];//自己出的手势
        $fitidhands=$FourGame['fitidhand'];//对方出的手势
        $result=$uidhands-$fitidhands;//手势做减法

        $teamA=$roomData["teamA"];
        $teamB=$roomData["teamB"];

        $uidorderPlay=$roomData["uidorderPlay"];//获取己方当前对战玩家序列
        $fitidorderPlay=$roomData["fitidorderPlay"];//获取敌方当前对战玩家序列

        $gameDataArray="";
        $gameDataArray['uidhands']= $uidhands;
        $gameDataArray['fitidhands']=$fitidhands;
        $this->dataModel->setFiveGamaData($roomid,$uid,$gameDataArray);
        if($fitData['gameData']==0){

        }
        else {
            //游戏逻辑
            if($result==1){
                $this->DataModel->setGameWin($roomid, $uid);
            }
            else if($result==3){
                $this->DataModel->setGameWin($roomid, $fitid);
            }
            else if($result==-1){
                $this->DataModel->setGameWin($roomid, $fitid);
            }
            else if($result==-3){
                $this->DataModel->setGameWin($roomid, $uid);
            }
            else{
                //todo 通知对战双方 游戏继续开始
                $this->dataModel->clearGameData();
                $reData['m'] = 'waitGame';
                Gateway::sendToUid($uid, json_encode($reData));
                Gateway::sendToUid($fitid, json_encode($reData));
                return;
            }

            $mywin = $this->dataModel->getWinData($roomid, $uid);//自己获取胜利数
            $fitwin = $this->dataModel->getWinData($roomid, $fitid);//对方获取胜利数

            if ($mywin == 2 || $fitwin == 2) {
                if ($mywin == 2) {
                    //$this->dataModel->setOutData($roomid, $fitid);//todo 设置用户游戏结束
                    if($myteam=="teamA"){
                        $now_order=$roomData['status']['teamB']['order'];
                        $status=0;
                        $new_order=$now_order+1;
                        foreach ($roomData['teamB'] as $k=>$v){
                            if($v['order']==$new_order){
                                $status=1;
                            }
                        }
                        if($status==1){
                            //通知输家 返回房间    胜利者和 下一位比赛人员进入游戏准备房间
                            $reData = "";
                            $reData['l'] = 'outGame';
                            $reData['w'] = 'waitGame';
                            //通知对方进入等待房间
                            Gateway::sendToUid($fitid, json_encode($reData['l']));
                            //更新fitorderPlay的值
                            $this->dataModel->updaDatafitid($roomid, $fitid, $fitidorderPlay);
                            //获取敌方下个出战的玩家id
                            $fitidNext = $this->dataModel->GetNextuid($roomid, $fitid, $fitidorderPlay);
                            //通知敌方下一名对战玩家进入对战准备房间
                            Gateway::sendToUid($fitidNext, json_encode($reData['l']));
                            //通知自己进入游戏对战等待房间，做下一轮准备
                            Gateway::sendToUid($uid, json_encode($reData['w']));
                        }else{
                            //游戏结束  通知胜利者领奖画面
                            $this->$fitData["teamA"][$fitid]["out"]=true;
                            $reData['w']="winGame";
                            Gateway::sendToUid($fitid, json_encode($reData));
                        }
                    }else{
                        $now_order=$roomData['status']['teamA']['order'];
                        $status=0;
                        $new_order=$now_order+1;
                        foreach ($roomData['teamA'] as $k=>$v){
                            if($v['order']==$new_order){
                                $status=1;
                            }
                        }
                        if($status==1){
                            //通知输家 返回房间    胜利者和 下一位比赛人员进入游戏准备房间
                            $reData = "";
                            $reData['l'] = 'outGame';
                            $reData['w'] = 'waitGame';
                            //通知对方进入等待房间
                            Gateway::sendToUid($uid, json_encode($reData['l']));
                            //更新fitorderPlay的值
                            $this->dataModel->updaDatafitid($roomid, $uid, $fitidorderPlay);
                            //获取敌方下个出战的玩家id
                            $fitidNext = $this->dataModel->GetNextuid($roomid, $uid, $fitidorderPlay);
                            //通知敌方下一名对战玩家进入对战准备房间
                            Gateway::sendToUid($fitidNext, json_encode($reData['l']));
                            //通知对方进入游戏对战等待房间，做下一轮准备
                            Gateway::sendToUid($fitid, json_encode($reData['w']));
                        }else{
                            //游戏结束  通知胜利者领奖画面
                            $this->$uidData["teamA"][$uid]["out"]=true;
                            $reData['w']="winGame";
                            Gateway::sendToUid($uid, json_encode($reData));
                        }
                    }

                }

            } else {
                //todo 通知对战双方 游戏继续开始
                $reData['m'] = 'waitGame';
                Gateway::sendToUid($uid, json_encode($reData));
                Gateway::sendToUid($fitid, json_encode($reData));
                //todo 返回参数没有构造
            }
        }
    }


    /*todo 客户端 定时轮询
     *参数：roomid uid status
     * status ：当前游戏状态
     *         1：与当前状态不符合 不做处理
     *         2：与当前状态符合
     *                 初始化go=0
     *                 判断所有客户的最后操作时间 超时则判断对战双方胜负计入缓存
     *                 有未出结果  切双方都没有超时  则go=1
     *
     * go=1： 不错处理；
     * go=0： 匹配好游戏 通知客户继续游戏二次匹配
     *
     *
    */
    public function goon(){

    }
    //断线重连
    public function reconnect(){

    }
}
?>